#ifndef _DRV_NEUL_AT_H
#define _DRV_NEUL_AT_H

#include <DRV_Neul.h>

#pragma pack(1)
typedef struct
{
    char *cmdName;
    char *atCmd;
    int waitTime;
    int (*atRspProc)(char *buffer, int len, unsigned char *exdata);
    char *nextCmd;    //命令成功需要执行的命令，不填顺序执行
    int (* action)(); //执行完指令后执行动作
}ST_CMD;

typedef struct
{
    char *raw_data;    //AT指令返回的原始数据
    unsigned char *extract_data;   //AT指令原始数据解析之后数据，需要每个AT指令单独定义数据结构
}ST_AT_EXE_OUT_DATA;
#pragma pack()

int AtResponseComm(char *buffer, int len, unsigned char *exdata);

/**
@brief AT指令执行函数
@param tpye 设备类型
@param cmd AT指令
@param timeout 超时时间
@param atRspProc 响应处理函数
@param odata 返回数据
@return 0.成功,-1.写失败,-2读失败(命令执行超时), -4解析异常,<-100解异常s
**/
int AtExe(EN_DEV_TYPE type,char *cmd, int timeout, int (*atRspProc)(char *buffer, int len, unsigned char *exdata), ST_AT_EXE_OUT_DATA *odata);
int AtCmdFind(ST_CMD *tbl, int num, char *cmd);
int AtCmdOne(EN_DEV_TYPE type,ST_CMD *cmd, ST_AT_EXE_OUT_DATA *odata);
int AtFmtCmdOne(EN_DEV_TYPE type,ST_CMD *cmd, ST_AT_EXE_OUT_DATA *odata, int len, ...);
int AtCmd(EN_DEV_TYPE type, ST_CMD cmd[],int num);
#endif

